/**
 * EthanMS服务端机器人插件
 * 事件处理脚本
 * @author ethan
 */

/**
 * 绑定的QQ群列表，只处理此列表内QQ群的消息
 */
const Groups = [123, 987]

/**
 * 管理员QQ列表
 * @type {number[]}
 */
const Admins = [10086, 10010]

/**
 * 普通成员命令列表
 * 数据格式：命令名称 命令处理函数 命令参数个数 参数不足时消息（可空）
 * @type {*[][]}
 */
const MessageHandlers = [
    ["绑定qq", bindQQ, 2, "命令格式：绑定qq 账号 密码"],
]

/**
 * 管理员命令列表
 * @type {string[]}
 */
const AdminMessageHandlers = [
    "弹窗公告"
]

/**
 * 判断是否是管理员
 * @param qq
 * @returns {boolean}
 */
function isAdmin(qq) {
    for (let i = 0; i < Admins.length; i++) {
        if (qq === Admins[i]) return true
    }
    return false
}

/**
 * 判断是否是允许的群消息
 */
function isAllowedGroup(group) {
    for (let i = 0; i < Groups.length; i++) {
        if (qq === Groups[i]) return true
    }
    return false
}

/**
 * 处理QQ群收到的消息
 * @param msgId      消息ID
 * @param fromGroup  群号
 * @param fromQQ     发言QQ号
 * @param msg 		 消息文本
 * @param member     发言者成员信息
 */
function groupMsg(msgId, fromGroup, fromQQ, msg, member) {
    //如果不是列表中的群，则不处理
    if (!isAllowedGroup(fromGroup)) return
    //处理管理员命令
	if (isAdmin(fromQQ)) {
		handleAdminMsg(fromGroup, fromQQ, msg)
	}
	//处理普通命令
	handleMsg(fromQQ, msg)
}

/**
 * 处理收到的私聊消息
 * @param subType {int}  子类型，11/来自好友 1/来自在线状态 2/来自群 3/来自讨论组
 * @param msgId {long}   消息ID
 * @param fromQQ {long}  QQ号
 * @param msg {string}   消息文本
 */
function privateMsg(subType, msgId, fromQQ, msg) {
    if (isAdmin(fromQQ)) {
        handleAdminMsg(0, fromQQ, msg)
    }
	handleMsg(0, fromQQ, msg)
}

/**
 * 解析管理员命令
 * @param fromGroup {long}
 * @param fromQQ {long}
 * @param msg {string}
 */
function handleAdminMsg(fromGroup, fromQQ, msg) {
	// 管理员消息必须以‘！’或者‘!’作为前缀
    if (msg.startsWith("!") || msg.startsWith("！")) {
		msg = msg.substring(1)
	} else {
	    return
    }

	let arr = msg.split(" ")
	for (let i = 0; i < AdminMessageHandlers.length; i++) {
        let handler = AdminMessageHandlers[i]
        if (arr[0] === handler[0]) {
            if (arr.length < handler[2] + 1) {
                if (handler[3]) {
                    sendResponse(fromGroup, fromQQ, handler[3])
                }
            } else {
                handler[1](arr)
            }
            return
        }
    }
}

/**
 * 解析普通命令
 * @param fromGroup {long}
 * @param fromQQ {long}
 * @param msg {string}
 */
function handleMsg(fromGroup, fromQQ, msg) {
	let arr = msg.split(" ")
	for (let i = 0; i < MessageHandlers.length; i++) {
		let handler = MessageHandlers[i]
		if (arr[0] === handler[0]) {
			handler[1](arr);
		}
	}
}

/**
 * 发送回应消息
 * @param group 群号，若为0则发送私聊消息
 * @param qq    qq号
 * @param msg   消息文本
 */
function sendResponse(group, qq, msg) {
    if (group > 0) {
        //在群里@qq
        CQ.sendGroupMsg(group, CC.at(qq) + msg)
    } else {
        CQ.sendPrivateMsg(qq, msg)
    }
}

// ------------------------------------------
// 以下开始写消息处理函数
// 消息处理函数必须是 function(group, qq, args) 的形式
// 其中args是消息文本以空格分隔的数组
//-------------------------------------------

/**
 * 绑定QQ命令处理函数
 * @param group 消息来源qq群，0为私聊
 * @param qq    消息来源qq
 * @param args {String[]} 参数，下标从1开始
 */
function bindQQ(group, qq, args) {
    
}